package org.jeecg.access.platform.entity.publish;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;
import java.io.Serializable;

/**
 * @description: 内容-平台发布映射实体类
 * 映射数据库表：platform_content_mapping
 * 功能：记录单条内容在单个平台的发布详情，是内容与外部平台的关联桥梁，支撑发布结果追溯
 * @author: taogang
 * @date: 2025/8/11 16:49
 */
@Data
@TableName("platform_content_mapping")
public class ContentMapping implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 映射记录ID
     * 数据库主键，唯一标识一条"内容-平台"的发布关联记录
     * 生成规则：建议使用UUID或雪花算法，确保唯一性
     * 示例："mapping_1234567890abcdef"
     */
    @Id
    private String id;

    /**
     * 发布账号ID
     * 关联系统内的平台账号ID（如"微信账号ID"、"抖音账号ID"），对应账号管理表
     * 用途：区分同一平台的不同发布账号（如用账号A和账号B分别发布到微信）
     * 示例："account_wx_789"（表示微信平台的某账号）
     */
    @Column(name = "account_id")
    private String accountId;

    /**
     * 内容ID
     * 关联本系统的内容ID（对应platform_content表的id）
     * 用途：建立"内容-平台发布记录"的关联，支持通过内容查询所有平台的发布情况
     * 示例："content_123"（关联系统内的某篇文章/视频）
     */
    @Column(name = "content_id")
    private String contentId;

    /**
     * 平台侧内容ID
     * 外部平台返回的内容唯一标识（如微信公众号的文章ID、抖音的视频ID）
     * 用途：
     * 1. 后续操作（如修改、删除已发布内容）需使用该ID调用平台接口
     * 2. 直接跳转至平台查看内容（拼接平台URL）
     * 示例："wx_article_456"（微信平台返回的文章ID）
     */
    @Column(name = "platform_content_id")
    private String platformContentId;

    /**
     * 发布类型（平台内发布方式）
     * 标识在该平台内的发布渠道/形式（同一平台可能有多种发布方式）
     * 详细见PlatformType
     * 用途：区分同一平台的不同发布场景，适配不同的平台接口
     */
    @Column(name = "publish_type")
    private Integer publishType;

    /**
     * 平台类型编码
     * 标识发布的目标平台，使用统一编码便于系统识别
     * 建议取值：
     * "WECHAT" - 微信
     * "DOUYIN" - 抖音
     * "WEIBO" - 微博
     * "XIAOHONGSHU" - 小红书
     * 用途：路由至对应的平台发布策略（如调用微信接口还是抖音接口）
     */
    @Column(name = "platform_type")
    private String platformType;

    /**
     * 发布时间
     * 内容在该平台的实际发布完成时间（由平台接口返回或系统记录）
     * 格式：yyyyMMddHHmmss（与系统统一时间格式保持一致）
     * 用途：统计发布时效、按时间筛选发布记录
     * 示例："20241001163045"（表示2024-10-01 16:30:45发布成功）
     */
    @Column(name = "publish_time")
    private String publishTime;

    /**
     * 发布状态
     * 标识该平台的发布进度或结果，状态流转反映发布全流程
     * 建议取值：
     * "PENDING" - 待发布（已加入发布队列，未开始处理）
     * "PROCESSING" - 发布中（正在调用平台接口）
     * "SUCCESS" - 发布成功（平台返回发布成功）
     * "FAIL" - 发布失败（平台返回错误或系统处理异常）
     * 用途：前端展示发布进度、后端判断是否需要重试
     */
    @Column(name = "status")
    private String status;

    /**
     * 错误信息
     * 仅当status为"FAIL"时有效，记录发布失败的原因
     * 内容：可能是平台返回的错误信息（如"标题含敏感词"）或系统异常信息（如"网络超时"）
     * 用途：排查发布失败原因，为重试提供依据
     * 示例："抖音平台错误：视频格式不支持（仅支持mp4）"
     */
    @Column(name = "error_msg")
    private String errorMsg;

    /**
     * 微信发送成功后会给与的消息记录用于后续查询发送状态
     *
     */
    @Column(name = "msg_id")
    private String msgId;


    //开启评论（1-开启，0-关闭）
    @Column(name = "need_open_comment")
    private Integer needOpenComment;


    //只有粉丝能评论（1-开启，0-关闭）
    @Column(name = "only_fans_can_comment")
    private Integer onlyFansCanComment;
}
